//
//  CZUserAccountViewModel.swift
//  WeiBo
//
//  Created by Apple on 16/9/5.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit
//  封装OAuth登录相关接口
class CZUserAccountViewModel: NSObject {

    //  单例全局访问点
    static let sharedUserAccount: CZUserAccountViewModel = CZUserAccountViewModel()
    //  构造函数私有化
    private override init() {
        super.init()
    }
    //  获取保存的用户模型
    var userAccount: CZUserAccount? {
        return CZUserAccount.loadUserInfo()
    }
    //  判断是否登录
    var isLogin: Bool {
        return accessToken != nil
    }
    
    //  获取accesstoken逻辑
    var accessToken: String? {
        if let token = userAccount?.access_token {
            //  token不为nil, 判断时间是否过期
            
            //  如果过期时间比当前时间是降序表示没有过期
            if userAccount?.expiresDate?.compare(Date()) == .orderedDescending {
                return token
            } else {
                return nil
            }
        
        }
        return nil
    }
    
    //  获取accesstoken
    func requestAccesstoken(code: String, callBack: @escaping (Bool)->()) {
        
        //  使用网络封装类请求数据
        CZNetworkTools.sharedTools.requestAccessToken(code: code) { (response, error) in
            if error  != nil {
                print("网络请求异常")
                callBack(false)
                return
            }
            //  代码执行到此网络请求成功
            guard let dic = response as? [String: Any] else {
                print("不是正确的字典格式")
                callBack(false)
                return
            }
            
            //  代码执行到此字典格式没有问题
            let userAccount = CZUserAccount(dic: dic)
            
            //  通过token获取用户信息
            //  函数调用必须使用self关键字
            self.requestUserInfo(userAccount: userAccount, callBack: callBack)
            
        }
    }
    
    
    //  通过accesstoken获取用户信息
    fileprivate func requestUserInfo(userAccount: CZUserAccount, callBack: @escaping (Bool)->()) {
        
        CZNetworkTools.sharedTools.requestUserInfo(userAccount: userAccount) { (response, error) in
            if error != nil {
                print("网络加载异常: \(error)")
                callBack(false)
                return
            }
            //  网络请求成功
            guard let dic = response as? [String: Any] else {
                print("不是一个正确的字典格式")
                callBack(false)
                return
            }
            //  代码执行到此字典格式正确
            userAccount.name = dic["name"] as? String
            userAccount.avatar_large = dic["avatar_large"] as? String
            //  归档用户对象
            
            let result = userAccount.saveUserAccount()
            if result {
                //
                print("用户保存成功，登录成功")
                callBack(true)
            } else {
                //
                print("用户归档失败")
                callBack(false)
            }
            
        }
    }
}
